package org.Yiran.timetale_re.item.rune.base;

import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

/**
 * 抽象符文类
 * <p>
 * 该类是所有符文能力的抽象基类，实现了RuneAbility接口。
 * 提供了符文的基本属性和默认实现，包括类型、分类和冷却时间。
 * 子类可以继承此类并实现具体的符文效果。
 * </p>
 */
public abstract class AbstractRune implements RuneAbility {
    
    // ============================== 实例变量 ==============================
    
    private final String type;      // 符文类型
    private final String category;  // 符文分类
    private final int cooldown;    // 冷却时间（tick单位）

    // ============================== 构造方法 ==============================
    
    /**
     * 构造函数 - 创建一个新的抽象符文（使用默认冷却时间）
     * 
     * @param type 符文类型
     * @param category 符文分类
     */
    protected AbstractRune(String type, String category) {
        this(type, category, 1200); // 默认60秒冷却（20 tick = 1秒）
    }

    /**
     * 构造函数 - 创建一个新的抽象符文（指定冷却时间）
     * 
     * @param type 符文类型
     * @param category 符文分类
     * @param cooldown 冷却时间（tick单位）
     */
    protected AbstractRune(String type, String category, int cooldown) {
        this.type = type;
        this.category = category;
        this.cooldown = cooldown;
    }

    // ============================== 符文属性方法 ==============================
    
    /**
     * 获取符文类型
     * 
     * @return 符文类型字符串
     */
    @Override
    public String getType() {
        return type;
    }

    /**
     * 获取符文分类
     * 
     * @return 符文分类字符串
     */
    @Override
    public String getCategory() {
        return category;
    }

    /**
     * 获取符文冷却时间
     * 
     * @return 冷却时间（tick单位）
     */
    @Override
    public int getCooldown() {
        return cooldown;
    }

    // ============================== 符文行为方法 ==============================
    
    /**
     * 符文每tick更新时调用的方法
     * <p>
     * 默认空实现，子类可以根据需要重写此方法来实现持续效果。
     * 例如：持续治疗、持续伤害、状态效果维持等。
     * </p>
     * 
     * @param stack 符文物品堆
     * @param level 世界对象
     * @param player 持有符文的玩家
     */
    @Override
    public void onTick(ItemStack stack, Level level, Player player) {
        // 默认空实现，子类可选择性重写
    }
}